package com.cuz.daileetcode.bat100;

public class 让一种字符放左侧_一种字符右侧的交换次数 {

    public static int solution1(char[] charArray) {
        if (charArray == null || charArray.length <= 1) {
            return 0;
        }
        //让所有G位于左侧  的调整次数
        int allGLeft = 0;
        // 已经有多少给G位于左侧了
        int hasAlreadyGLeftMost = 0;
        //比如说
        //GGBG 第一个G需要移动i-hasAlreadyGLeftMost次就是0
        //第二个G hasAlreadyGLeftMost=1 次数为0
        //第三个G hasAlreadyGLeftMost=2 次数为3-2=1
        //可以理解成每次循环到一个G就花费 i - hasAlreadyGLeftMost让这个G位于最左侧，
        // 且最左侧具备的G个数就是 hasAlreadyGLeftMost++
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 'G') {
                allGLeft += i - hasAlreadyGLeftMost;
                hasAlreadyGLeftMost++;
            }
        }
        int allBLeft = 0;
        int hasAlreadyBLeftMost = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 'B') {
                allBLeft += i - hasAlreadyBLeftMost;
                hasAlreadyBLeftMost++;
            }
        }
        return Math.min(allBLeft, allGLeft);
    }
}
